/**
 * 系统配置相关 API
 */

import { get, put } from '@/utils/request'

/**
 * 系统配置项
 */
export interface SystemConfig {
  configKey: string
  configValue: string
  category: string
  description: string
  dataType: string
  isEncrypted: boolean
  lastModifiedBy: string
  lastModifiedAt: string
}

/**
 * 网络配置
 */
export interface NetworkConfig {
  controlApiPort: number
  tcpServerPort: number
  nodeDefaultPort: number
  websocketPort: number
}

/**
 * Git 配置
 */
export interface GitConfig {
  defaultBranch: string
  cloneTimeout: number
  enableShallowClone: boolean
  defaultCloneDepth: number
}

/**
 * 系统配置
 */
export interface SystemGeneralConfig {
  maxConcurrentTasks: number
  taskTimeoutMinutes: number
  logRetentionDays: number
  enableMetrics: boolean
}

/**
 * 获取所有配置
 */
export function getAllConfigs(): Promise<SystemConfig[]> {
  return get<SystemConfig[]>('/api/SystemConfig')
}

/**
 * 根据分类获取配置
 */
export function getConfigsByCategory(category: string): Promise<SystemConfig[]> {
  return get<SystemConfig[]>(`/api/SystemConfig/category/${category}`)
}

/**
 * 更新配置项
 */
export function updateConfig(configKey: string, configValue: string): Promise<void> {
  return put<void>(`/api/SystemConfig/${configKey}`, { configValue })
}

/**
 * 获取网络配置
 */
export function getNetworkConfig(): Promise<NetworkConfig> {
  return get<NetworkConfig>('/api/SystemConfig/network')
}

/**
 * 更新网络配置
 */
export function updateNetworkConfig(config: NetworkConfig): Promise<void> {
  return put<void>('/api/SystemConfig/network', config)
}

/**
 * 获取 Git 配置
 */
export function getGitConfig(): Promise<GitConfig> {
  return get<GitConfig>('/api/SystemConfig/git')
}

/**
 * 更新 Git 配置
 */
export function updateGitConfig(config: GitConfig): Promise<void> {
  return put<void>('/api/SystemConfig/git', config)
}

/**
 * 获取系统配置
 */
export function getSystemGeneralConfig(): Promise<SystemGeneralConfig> {
  return get<SystemGeneralConfig>('/api/SystemConfig/system')
}

/**
 * 更新系统配置
 */
export function updateSystemGeneralConfig(config: SystemGeneralConfig): Promise<void> {
  return put<void>('/api/SystemConfig/system', config)
}
